home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Gigarom 4
/
Mac Giga-ROM 4.0 - 1993.toast
/
FILES
/
DEV
/
A-B
/
Acius09:92.cpt
/
Acius09_92
/
TN 30ƒ
/
Ext4DIntf.p
< prev
next >
Wrap
Text File
|
1992-05-02
|
17KB
|
487 lines
{=========================================================================================}
{
4th DIMENSION EXTERNAL COMMANDS INTERFACE FILE
Written by ACI and ACIUS Engineering Teams.
© 1987,1991 ACI, ACIUS Inc.
}
{=========================================================================================}
Unit Ext4DIntf;
{$IFC UNDEFINED THINK_PASCAL }
{$D- }
{$R- }
{$ENDC }
INTERFACE
{$IFC UNDEFINED THINK_PASCAL }
USES MemTypes,
QuickDraw,
OSIntf,
ToolIntf,
PackIntf;
{$ENDC}
{$IFC UNDEFINED THINK_PASCAL }
{$SETC DebugOn = TRUE }
{$IFC DebugOn }
{$D+ }
{$R+ }
{$ELSEC }
{$D- }
{$R- }
{$ENDC }
{$ENDC }
CONST
{---------------------------------------------------------------------------------------}
{ Special ProcNums for an External Package }
{---------------------------------------------------------------------------------------}
Init4DPackage = -1; { Sent once time when the database is opened
and before the execution of the Startup procedure }
InitPackage = -1; { Same }
DeInit4DPackage = -2; { Sent once time when the database is going to be closed }
DeInitPackage = -2; { Same }
{---------------------------------------------------------------------------------------}
{---------------------------------------------------------------------------------------}
{ Types of Fields }
{---------------------------------------------------------------------------------------}
AlphaField = 0; { Alphanumeric field }
NumericField = 1; { Real field }
TextField = 2; { Text field }
PictureField = 3; { Picture field }
DateField = 4; { Date field }
BooleanField = 6; { Boolean field }
SubFileField = 7; { Subfield field }
IntegerField = 8; { Integer field }
LongIntField = 9; { LongInt field }
TimeField = 11; { Time field }
{---------------------------------------------------------------------------------------}
{---------------------------------------------------------------------------------------}
{ Entry points }
{---------------------------------------------------------------------------------------}
EX_CREATE_RECORD = 1; { CREATE RECORD }
EX_SAVE_RECORD = 2; { SAVE RECORD }
EX_NEXT_RECORD = 3; { NEXT RECORD }
EX_PREVIOUS_RECORD = 4; { PREVIOUS RECORD }
EX_GO_TO_RECORD = 5; { GO TO RECORD }
EX_Records_in_selection = 6; { Records in Selection }
EX_DELETE_SELECTION = 7; { DELETE SELECTION }
EX_FIRST_RECORD = 8; { FIRST RECORD }
EX_Count_files = 9; { Number of files }
EX_Count_fields = 10; { Number of fields }
EX_Filename = 11; { Name of the file }
EX_FIELD_ATTRIBUTES = 12; { FIELD ATTRIBUTES }
EX_SORT_SELECTION = 13; { SORT }
EX_SEARCH = 14; { SEARCH }
EX_Before_selection = 15; { Before Selection }
EX_End_selection = 16; { End of Selection }
EX_GET_FIELD = 17; { Read contents of a field }
EX_PUT_FIELD = 18; { Write to a field }
EX_GET_VARIABLE = 19; { Read contents of a variable }
EX_PUT_VARIABLE = 20; { Write to a variable }
EX_INSTALL_TASK = 21; { Installing of a 4D task }
EX_REMOVE_TASK = 22; { Remove a 4D task }
EX_GetProcResID = 23; { Number of current resource }
EX_Get_export_filter = 24; { Export ASCII filter (Mac -> Other) }
EX_Get_import_filter = 25; { Import ASCII filter (Mac <- Other) }
EX_Get_packed_record = 26; { Reading a packed record }
EX_PUT_PACKED_RECORD = 27; { Writing a packed record }
EX_CREATE_SET = 28; { CREATE SET }
EX_USE_SET = 29; { USE SET }
EX_EXECUTE_PROCEDURE = 30; { EXECUTE Procedure}
EX_Execute_function = 31; { EXECUTE Function }
{ The entry points 32 thru 38 are reserved. }
EX_EVENT_IS_TAKEN = 39; { The event is taken by the back-ground task }
EX_Locked = 40; { Locked Record }
EX_READ_WRITE = 41; { READ WRITE/READ ONLY }
EX_LOAD_RECORD = 42; { LOAD RECORD for multi-user mode }
EX_RELATE_ONE = 43; { Activate the many to one relations }
EX_RELATE_MANY = 44; { Activate the one to many relations }
EX_Is_multiuser = 45; { Mode test to access the database }
{ The entry point 46 is reserved and not yet implemented. }
EX_String = 47; { Calls 4th DIMENSION String command }
EX_POPUP_FIELD_LIST = 48; { Pop Up field list }
EX_POPUP_FILE_LIST = 49; { Pop up file list }
EX_GetFileFieldNum = 50; { Returns file and field number of specified string name }
EX_Selected_record_number = 51; { Number of current record in the selection }
{ The entry points 52 thru 55 are reserved and not yet implemented. }
EX_Get_infos = 56;
EX_MESSAGES = 57;
{---------------------------------------------------------------------------------------}
{ External areas }
{---------------------------------------------------------------------------------------}
{ MouseDown = 1;}
CallTheScript = 301; { Same }
{ KeyDown = 3;}
GoToNextField = 110; { To return in Message }
GoToPreviousField = 111; { Same }
EventNotTaken = 112; { Same }
{ AutoKey = 5;}
{ UpdateEvt = 6;}
IsNewData = 2; { in When if the current record has changed }
InitEvt = 16;
IsPrinting = -1; { in Message }
IsInputLayout = 1; { in Modifiers }
IsOutputLayout = 0; { in Modifiers }
IsExternalWindow = -1; { in When }
TestEvt = 20;
AreaCanBeSelected = 101; { in Message }
DeInitEvt = 17;
CannotReject = 130; { In Message }
CanReject = 0; { In Message }
AreaRejects = 122; { In Message }
CursorEvt = 18;
SelectEvt = 21;
DeSelectEvt = 22;
ScrollEvt = 25;
StructEvt = 26;
AreaCustomized = 102; { In Message }
IdleEvt = 0;
TestPrintSizeEvt = 27;
AreaVarFrame = 103; { In Message }
PrintSizeEvt = 28;
PrintBandEvt = 29;
UndoEvt = 30;
CutEvt = 31;
CopyEvt = 32;
PasteEvt = 33;
ClearEvt = 34;
SelectAllEvt = 35;
InstallMenusEvt = 40;
DeInstallMenusEvt = 41;
MenuSelectedEvt = 42;
ActivateMenusEvt = 43;
GrowBoxEvt = 50;
AreaMinSize = 121; { In Modifiers - Width,Height in Message }
TYPE
{---------------------------------------------------------------------------------------}
{ Bundle '4BND', '4BNX', '4BNR', '4BNH' }
{---------------------------------------------------------------------------------------}
ResEntry = Record
Typ : ResType;
LocalNum,
GlobalNum : Integer;
End;
ResTabHandle = ^ResTabPtr;
ResTabPtr = ^ResTab;
ResTab = Record
NbEntry : Integer;
Tab : Array [1..1] Of ResEntry;
End;
{---------------------------------------------------------------------------------------}
{---------------------------------------------------------------------------------------}
{ 4th DIMENSION Variables and expressions }
{---------------------------------------------------------------------------------------}
Str40 = string[40];
Str80 = string[80];
Typkind = ( Unused1,
Numeric, { Numeric }
Alpha, { AlphaNumeric }
Unused2,
Date, { Date }
Nothing, { Undefined }
Bool, { Boolean }
Unused3,
Unused4,
Long4D, { LongInt }
Pict, { Picture }
Time4D, { Time }
Unused5,
Table, { 2 Dimensional Array}
TabNum, { Array of Reals }
TabInt, { Array of Integers }
TabLong, { Array of LongInts }
TabDate, { Array of Dates }
TabAlpha, { Array of Text }
TabPict, { Array of Pictures }
Unused6,
TabStrFix, { Array of Fixed Strings }
TabBool, { Array of Booleans }
Unused7,
StrFix { Fixed String : max. 255 characters }
);
Date4D = Record { 4th DIMENSION Date expressions }
Day : Integer;
Month : Integer;
Year : Integer;
End;
TE4D = Record { 4th DIMENSION Text expressions }
Len : Integer; { Length if >=0 }
CC : CharsHandle; { Characters, may be equal to Nil }
End;
PicEnd = Record { Added to the end of the Picture definition }
Origin : Point;
Transfer : Integer;
End; { Warning : may not be word aligned }
TabOfIntHandle = ^TabOfIntPtr;
TabOfIntPtr = ^TabOfInt;
TabOfLongHandle = ^TabOfLongPtr;
TabOfLongPtr = ^TabOfLong;
TabOfNumHandle = ^TabOfNumPtr;
TabOfNumPtr = ^TabOfNum;
TabOfAlphaHandle = ^TabOfAlphaPtr;
TabOfAlphaPtr = ^TabOfAlpha;
TabOfPictHandle = ^TabOfPictPtr;
TabOfPictPtr = ^TabOfPict;
TabOfDateHandle = ^TabOfDatePtr;
TabOfDatePtr = ^TabOfDate;
TabOfBoolHandle = ^TabOfBoolPtr;
TabOfBoolPtr = ^TabOfBool;
TabOfTabHandle = ^TabOfTabPtr;
TabOfTabPtr = ^TabOfTab;
TabStrFixHandle = ^TabStrFixPtr;
TabStrFixPtr = ^TabStrFixRec;
SmallVarRec = Record
VarKind: Typkind;
Filler1: Boolean;
Case Typkind of
TabInt : (NbElem: LongInt;TabIntH: TabOfIntHandle;CurSel:Integer);
TabLong : (NbElem2: LongInt;TabLongH:TabOfLongHandle);
TabNum : (NbElem3: LongInt;TabNumH:TabOfNumHandle);
TabAlpha : (NbElem4: LongInt;TabAlphaH:TabOfAlphaHandle);
TabPict : (NbElem5: LongInt;TabPictH:TabOfPictHandle);
TabDate : (NbElem6: LongInt;TabDateH:TabOfDateHandle);
TabBool : (NbElem7: LongInt;TabBoolH:TabOfBoolHandle);
TabStrFix : (NbElem9: LongInt;TabFixH:TabStrFixHandle);
End;
TabOfInt = ARRAY [0..100000] of INTEGER; { Array of integers }
TabOfLong = ARRAY [0..100000] of LongInt; { Array of LongInts }
TabOfNum = ARRAY [0..100000] of Extended; { Array of Reals (extended) }
TabOfAlpha = ARRAY [0..100000] of TE4D; { Array of Text's }
TabOfPict = ARRAY [0..100000] of PicHandle; { Array of Pictures }
TabOfDate = ARRAY [0..100000] of Date4D; { Array of Dates }
TabOfBool = PACKED ARRAY [0..100000] of Boolean; { Array of Booleans }
TabOfTab = ARRAY [0..100000] of SmallVarRec; { Array of 2 Dimensions }
TabStrFixRec = RECORD
LenFix: INTEGER;
{ + additionnal data }
END; { Array of Fixed length strings }
VarRecPtr = ^VarRec;
VarRec = Record
VarKind : Typkind;
Filler1 : Boolean;
Case Typkind of
Numeric : (RValue:Extended);
Date : (DValue:Date4D);
Bool : (BValue:Boolean);
Alpha : (Len:Integer;CC:CharsHandle);
Pict : (PicSize:LongInt;PP:PicHandle);
Long4D,
Time4D : (LValue:LongInt);
StrFix : (SLen : Integer;SValue:Str255);
TabInt : (NbElem: LongInt;TabIntH: TabOfIntHandle;CurSel:Integer);
TabLong : (NbElem2: LongInt;TabLongH:TabOfLongHandle);
TabNum : (NbElem3: LongInt;TabNumH:TabOfNumHandle);
TabAlpha : (NbElem4: LongInt;TabAlphaH:TabOfAlphaHandle);
TabPict : (NbElem5: LongInt;TabPictH:TabOfPictHandle);
TabDate : (NbElem6: LongInt;TabDateH:TabOfDateHandle);
TabBool : (NbElem7: LongInt;TabBoolH:TabOfBoolHandle);
Table : (NbElem8: LongInt;TabTabH:TabOfTabHandle);
TabStrFix : (NbElem9: LongInt;TabFixH:TabStrFixHandle);
End;
{---------------------------------------------------------------------------------------}
{---------------------------------------------------------------------------------------}
{ Entry Points parameter block }
{---------------------------------------------------------------------------------------}
LineRec = Record
LogicOper : (NoOper,ANDLogic,ORLogic,Except);
Field : Integer;
File4D : Integer;
Operation : (NoOp,
IsEqual,
IsDifferent,
IsGreater,
IsGreaterOrEqual,
IsLess,
IsLessOrEqual,
Contains,
NoContains);
Case Byte of
0: (SRecVal: Str40);
1: (RRecVal: Extended);
2: (DRecVal: Date4D);
3: (LRecVal: LongInt);
4: (IRecVal: INTEGER);
5: (BRecVal: Boolean);
End;
ParmBlock = Record
FileNumber : Integer;
FieldNumber : Integer;
RecordNumber : LongInt;
ManyToOne,
OneToMany : Boolean;
Name : Str255;
HH : Handle;
Error : Integer;
Result1 : LongInt;
Result2 : LongInt;
Result3 : LongInt;
Result4 : LongInt;
RR : Extended;
DD : Date4D;
LL : LongInt;
II : Integer;
SS : Str80;
TT : Te4D;
ClearOldVariable : Boolean;
NumberOfLines : Integer;
Lines : Array [1..20] of LineRec; { See note below }
End;
{ Note
The size of the "Lines" array can be changed.
If, for example, you call 4th DIMENSION to sort a selection on only 2 levels
you can declare the variable with only 2 "LineRec".
Doing this, you economize the amount of memory taken by the record.
Accordingly, you can declare 30 "LineRec" if you need to sort
a selection on 30 levels. }
{---------------------------------------------------------------------------------------}
{---------------------------------------------------------------------------------------}
{ Parameters passed to an External Package }
{---------------------------------------------------------------------------------------}
EventRecordPtr = ^EventRecord;
ExtendedPtr = ^Extended;
Date4DPtr = ^Date4D;
TE4DPtr = ^TE4D;
PicHandPtr = ^PicHandle;
HandPtr = ^Handle;
PackParam = Record
Case Integer of
1 : (I : IntegerPtr);
2 : (L : LongIntPtr);
3 : (R : ExtendedPtr);
4 : (EV : EventRecordPtr);
5 : (RE : RectPtr);
6 : (D : Date4DPtr);
7 : (T : TE4DPtr);
8 : (S : StringPtr);
9 : (P : PicHandPtr);
10 : (HH : HandPtr);
11 : (X : VarRecPtr);
End;
PackageVariables = Array[1..1] Of PackParam;
PackageVariablesPtr = ^PackageVariables;
{ If you want to coerce the pointers by yourself, use the following types }
ParamsTabPtr = ^ParamsTab;
ParamsTab = Array [1..1] Of Ptr;
{---------------------------------------------------------------------------------------}
Procedure Call4D(Selector:Integer;Var Param:ParmBlock); Inline $206D,$FFF4,$4E90;
Function GetProg4DVers:Integer; InLine $3EAD, $FFF8;
Function IsVersion2:Boolean;
Function CurProcResID:Integer;
Function GetResNum(BundleType,ResourceType:ResType;LocalID:Integer):Integer;
{-----------------------------------------------------------------------------------------}
IMPLEMENTATION
{-----------------------------------------------------------------------------------------}
Function IsVersion2{:Boolean};
Begin
IsVersion2:=(GetProg4DVers=$4444);
End; { IsVersion2 }
Function CurProcResID{:Integer};
Var Blk4D: ParmBlock;
Begin
Call4D(EX_GetProcResID,Blk4D);
CurProcResID:=Ord(Blk4D.Result1);
End; { CurProcResID }
{$IFC UNDEFINED THINK_PASCAL }
{$R- }
{$ENDC }
Function GetResNum{(BundleType,ResourceType:ResType;LocalID:Integer):Integer};
Var Count:Integer;
WorkBundle:ResTabHandle;
Begin
GetResNum:=0;
WorkBundle:=ResTabHandle(GetResource(BundleType,CurProcResID));
If WorkBundle<>Nil Then
Begin
For Count:=1 To WorkBundle^^.NbEntry Do
Begin
With WorkBundle^^.Tab[count] Do
Begin
If (ResourceType=Typ) & (LocalID=LocalNum) Then
Begin
GetResNum := GlobalNum;
Count:=32001;
End;
End;
End;
End;
End; { GetResNum }
{$IFC UNDEFINED THINK_PASCAL }
{$IFC DebugOn }
{$R+ }
{$ENDC }
{$ENDC }
End. { End of Unit Ext4DIntf }